home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Grafika i zdjecia / Edytory grafiki rastrowej i wektorowej / Inscape 0.44.1 / Inkscape-0.44.1-1.win32.exe / share / extensions / svg_dropshadow < prev    next >
Text File  |  2006-09-06  |  2KB  |  89 lines

  1. #!/usr/bin/perl -w
  2. #
  3. # svg_dropshadow
  4. #
  5. # Creates drop shadows for all svg elements specified by --id, or
  6. # whole file if no ids are given.
  7. #
  8. # Authors: Daniel Goude (goude@dtek.chalmers.se)
  9. #
  10.  
  11. use strict;
  12. use warnings;
  13.  
  14. use File::Basename();
  15. use lib File::Basename::dirname($0);
  16.  
  17. use SpSVG;
  18.  
  19. my $sp = new SpSVG;
  20.  
  21. # Set the script name, used when displaying --help
  22. $sp->set_name($0);
  23.  
  24. # Set usage string (options are handled separately).
  25. my $usage = <<EOF;
  26. Creates drop shadows from svg group(s)
  27. EOF
  28. $sp->set_usage($usage);
  29.  
  30. # Set script specific options and description (used for --help)
  31. # SpSVG will hasdle in/out files, and help
  32. my @opt_vals = ( 
  33.     {
  34.         "opt" => "color=s",
  35.         "desc" => "Shadow color (default black)",
  36.     }, 
  37.     
  38.  
  39.     {
  40.         "opt" => "opacity=s",
  41.         "desc" => "Shadow offset (0-1, default 0.5)",
  42.     }, 
  43.     
  44.     {
  45.         "opt" => "offset=s",
  46.         "desc" => "Shadow offset, default 10",
  47.     },
  48. );
  49.  
  50. my %opts = $sp->get_opts(@opt_vals);
  51.  
  52. my $color = $opts{'color'} || 'black';
  53. my $opacity = $opts{'opacity'} || '0.5';
  54. my $offset= $opts{'offset'} || '10';
  55.  
  56. # Read input file (from --file or STDIN)
  57. $sp->parse;
  58.  
  59. # Apply make_shadow to selected ids, or whole file
  60. $sp->process_ids(\&make_shadow);
  61.  
  62. # Dump the file (to --output or STDOUT)
  63. $sp->dump;
  64.  
  65. # That's it!
  66.  
  67. # make_shadow takes an svg fragment and returns named fragment 
  68. # with a shadow added
  69. sub make_shadow {
  70.     my $element = shift;
  71.  
  72.     # Duplicate element
  73.     my $shadow = $element;
  74.  
  75.     # Set shadow color
  76.     $shadow =~ s/(stroke|fill):[^;]+;/$1:$color;/ig;
  77.  
  78.     my $svg = <<EOF;
  79.         <svg:g id="fooz" style="opacity:$opacity;" transform="translate($offset,
  80. $offset)">
  81.             $shadow
  82.         </svg:g>
  83.         $element
  84. EOF
  85.     return $svg;
  86. }
  87.  
  88.  
  89.